package org.dezenho.client.IU;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import org.dezenho.client.SO.DezenhoClient;
import org.dezenho.common.RMI.ServerInterface;
/** Classe responsavel pela exibicao dos placar apos o fim da partida e
 * opcao de retornar a sala de espera.
 * @author dafneguisard
 */
public class FimPartida extends GenericTela {

	private static final long serialVersionUID = 1L;
	private JDesktopPane jDesktopPane = null;  //  @jve:decl-index=0:visual-constraint="255,-1"
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JButton jButton = null;
	private JTable jTable = null;
	private JScrollPane jScrollPane = null;
	private ServerInterface server;
	private org.dezenho.client.RN.SalaEspera salaEspera;

	public FimPartida() {
		super();
	}
	/**
	 * Metodo para criar a tela FimPartida
	 * Implementa tambem a acao de desconectar o usuario do servidor quando a janela e fechada
	 * @param pontuacao
	 */
	public void criaTela(Map<String, Integer> pontuacao) {
		super.criaTela();
		this.setVisible(false);
		this.setContentPane(getJDesktopPane());
		this.setTitle("Placar Final");
		populaTabela(pontuacao);
		this.setVisible(true);
	}
	/**
	 * Metodo para popular a tabela que representa o placar final.
	 * O placar eh do tipo Map, entao para cada pair percorrido sao
	 * adicionadas novas linhas a tabela. Utiliza o modelo default, este
	 * possui metodos para formatacao prontos de biblioteca
	 */
	public void populaTabela(Map<String,Integer> pontuacao){
		DefaultTableModel tabelaDeResultados = new DefaultTableModel();
		tabelaDeResultados.addColumn("Jogador");
		tabelaDeResultados.addColumn("Pontuacao");
		Iterator<Entry<String, Integer>> it = pontuacao.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<String, Integer> linha = (Map.Entry<String, Integer>)it.next();
			Object[] celulas = {linha.getKey(), linha.getValue()};
			tabelaDeResultados.addRow(celulas);
		}

		getJTable().setModel(tabelaDeResultados);
		getJTable().setFont(new Font("Arial", Font.BOLD, 14));
		getJTable().getTableHeader().getColumnModel().getColumn(0).setWidth(120);
		getJTable().getTableHeader().setBackground(Color.LIGHT_GRAY);
		getJTable().getTableHeader().setFont(new Font("Arial", Font.BOLD, 16));
	}
	private JDesktopPane getJDesktopPane() {
		if (jDesktopPane == null) {
			jLabel1 = new JLabel();
			getJLabel1().setBounds(new Rectangle(156, 124, 177, 42));
			getJLabel1().setFont(new Font("Arial", Font.PLAIN, 24));
			getJLabel1().setText("PLACAR FINAL");
			jLabel = new JLabel();
			getJLabel().setBounds(new Rectangle(112, 16, 273, 95));
			getJLabel().setIcon(getLogo());
			jDesktopPane = new JDesktopPane();
			jDesktopPane.setBackground(Color.white);
			jDesktopPane.add(jLabel, null);
			jDesktopPane.add(jLabel1, null);
			jDesktopPane.add(getJButton(), null);
			jDesktopPane.add(getJScrollPane(), null);
		}
		return jDesktopPane;
	}
	/**
	 * Metodo de acesso ao JButton associa a acao do botao ao metodo de inicializar 
	 * novamente a sala de espera e inserir este jogador na lista.
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(166, 351, 161, 38));
			jButton.setFont(new Font("Arial", Font.BOLD, 12));
			jButton.setText("Voltar Sala de Espera");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					jButton.setEnabled(false);
					DezenhoClient.getInstance().getDezenhoTelaClient().inicializaTelaSalaEspera(new ArrayList<String>());
					DezenhoClient.getInstance().getSalaEspera().insereJogadorSalaEspera();
				}
			});
		}
		return jButton;
	}

	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable();
		}
		return jTable;
	}	
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setBounds(new Rectangle(45, 180, 421, 86));
			jScrollPane.setForeground(Color.WHITE);
			jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}
	public JLabel getJLabel() {
		return jLabel;
	}

	public void setJLabel(JLabel label) {
		jLabel = label;
	}

	public JLabel getJLabel1() {
		return jLabel1;
	}

	public void setJLabel1(JLabel label1) {
		jLabel1 = label1;
	}

	public void setJTable(JTable table) {
		jTable = table;
	}

	public org.dezenho.client.RN.SalaEspera getSalaEspera() {
		return salaEspera;
	}

	public ServerInterface getServer() {
		return server;
	}



}  //  @jve:decl-index=0:visual-constraint="10,10"
